
#define ROOT
#include <stdio.h>
#include "main.h"
#include "inkey.h"

void Error_Handler(void);
static void GPIO_Init(void);
TIM_HandleTypeDef htim0;
TIM_HandleTypeDef htim5;
static void TIM5_Init(void); 
KEY_RAM mKEY;


static void TIM5_Init(void)
{
	htim5.Instance = TIM5;
	htim5.Init.Unit = TIM_UNIT_US;
	htim5.Init.Period = 1005000;
	htim5.Init.AutoReload = TIM_AUTORELOAD_PRELOAD_ENABLE;
	if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
	{
		Error_Handler();
	}
}
static void TIM0_Init(void)
{
	htim0.Instance = TIM0;
	htim0.Init.Unit = TIM_UNIT_US;
	htim0.Init.Period = 1000000;
	htim0.Init.AutoReload = TIM_AUTORELOAD_PRELOAD_ENABLE;
	if (HAL_TIM_Base_Init(&htim0) != HAL_OK)
	{
		Error_Handler();
	}
}
void HAL_TIM_Callback(TIM_HandleTypeDef *htim)
{
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
	printf("A %d ", htim->Instance);
	if (htim->Instance == TIM0)
	{
		
	}
	if (htim->Instance == TIM1)
	{
		
	}
	if (htim->Instance == TIM2)
	{
		
	}
	if (htim->Instance == TIM3)
	{
		
	}
	if (htim->Instance == TIM4)
	{
		
	}
	if (htim->Instance == TIM5)
	{
		
	}
}

//————————————————
//版权声明：本文为CSDN博主「kensey」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
//原文链接：https://blog.csdn.net/qq_40545297/article/details/122623132
void displayInit();
int spi_main(void);

int main(void){
	
	SystemClock_Config(CPU_CLK_160M);
	printf("enter  main\r\n");
//	tls_irq_init();	
	HAL_Init();
	GPIO_Init();
	
	MDIP_HalInit();											// 显示模块硬件底层初始化
	memset(&mKEY, 0, sizeof(mKEY));
	TIM0_Init();
	HAL_TIM_Base_Start_IT(&htim0);
	TIM5_Init();
	HAL_TIM_Base_Start_IT(&htim5);
	
	
	
	int tick500ms = HAL_GetTick();
//	spi_main();
//	displayInit();
	while (1){

		HAL_Delay(10);
		MPKey_Scan();
		
		if (FPKeyDecodeDone){
		FPKeyDecodeDone = 0;
		printf("OK %02x\r\n", GPKeyData);
		}
		//MDIP_HalInit();
		//HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
		if ((HAL_GetTick() - tick500ms) > 500){
			tick500ms = HAL_GetTick();
				void aaaaaa();
			aaaaaa();
		}
	}
	
    return 0;
}

static void GPIO_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	
	__HAL_RCC_GPIO_CLK_ENABLE();


//	 初始化PB0-PB31的输出
	GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_16 | GPIO_PIN_17 | GPIO_PIN_26 | GPIO_PIN_25 | GPIO_PIN_24 | GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11 | GPIO_PIN_16 | GPIO_PIN_17 | GPIO_PIN_26 | GPIO_PIN_25 | GPIO_PIN_24, GPIO_PIN_SET);


	
	//初始化PB0-PB31的输入
	GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_12 | GPIO_PIN_13;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);	
	
	
	GPIO_InitStruct.Pin = GPIO_PIN_18;
	GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	HAL_NVIC_SetPriority(GPIOB_IRQn, 0);
	HAL_NVIC_EnableIRQ(GPIOB_IRQn);

}


#include "wm_hal.h"


void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin){
	if ((GPIOx == GPIOB) && (GPIO_Pin == GPIO_PIN_18))	{
		key_flag = 1;
	}

}

void Error_Handler(void){
	while (1)	{
	}
}

void assert_failed(uint8_t *file, uint32_t line){
	printf("Wrong parameters value: file %s on line %d\r\n", file, line);
}
